home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / msqc25t1 / exec.c < prev    next >
C/C++ Source or Header  |  1990-09-04  |  1KB  |  53 lines

  1. /* exec.c: Uses exec() to invoke a child process */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <process.h>
  6. #include <dos.h>
  7. #include <errno.h>
  8. #include <graph.h>
  9.  
  10. void main()
  11. {
  12. char newvar[] = "XYZ=7890",     /* New environment srting */
  13.     *envp [5],                  /* pointers to env strings */
  14.     childpath[] = "CHILD.EXE",       /* path to child */
  15.     *args[] = {"CHILD.EXE",     /* command line arguments */
  16.                 "A1", "A2", NULL},
  17.     comspec [64], path [64], prompt [64];
  18.  
  19.     /* Show current environment */
  20.     _clearscreen (_GCLEARSCREEN);
  21.     puts ("In parent, orginal environment is:\n");
  22.     system ("SET");
  23.  
  24.     /* Get current environment strings for child */
  25.     sprintf (comspec, "COMSPEC= %s", getenv ("COMSPEC"));
  26.     sprintf (path, "PATH=%s", getenv ("PATH"));
  27.     sprintf (prompt, "PROMPT=%s", getenv ("PROMPT"));
  28.  
  29.     /* Load pointer array for environment strings */
  30.     envp [0] = comspec;
  31.     envp [1] = path;
  32.     envp [2] = prompt;
  33.     envp [3] = newvar;
  34.     envp [4] = NULL;
  35.  
  36.     /* Chain to the child */
  37.     puts ("\nChaining to child process\n");
  38.     execvpe (childpath, args, envp);
  39.  
  40.         /* This code runs only if there was an error */
  41.         puts ("\nError occurred:\n");
  42.         switch (errno) {
  43.             case E2BIG:     puts ("Argument list to long"); break;
  44.             case EINVAL:    puts ("Invalid argument"); break;
  45.             case ENOENT:    puts ("Bad path or filename"); break;
  46.             case ENOEXEC:   puts ("Exec format error"); break;
  47.             case ENOMEM:    puts ("Not enough memory"); break;
  48.         }
  49. }
  50.  
  51.  
  52.  
  53.